package com.sise.cn.task.service;

import org.quartz.*;

/**
 * @author 龚秀峰
 * @version 1.0
 * @date 2020/6/8 15:25
 */
public abstract class AbstractTask implements Job,Runnable {


    @Override
    public void run() {
        // 覆盖这个方法就可以的逻辑，实现实时任务的调用
        executeJob();
    }

    @Override
    public void execute(JobExecutionContext jobExecutionContext) {
        // 这里是执行业务
        executeJob();
        if (isDelay()){
            // 业务执行完毕之后删除任务，这里做到延时任务
            JobKey jobKey = jobExecutionContext.getJobDetail().getKey();
            TriggerKey triggerKey = jobExecutionContext.getTrigger().getKey();
            ScheduledTask.deleteScheduleJob(jobKey, triggerKey);
        }
    }

    /**
     * 执行自定义任务
     */
    public abstract void executeJob();

    /**
     * 是否为延时任务
     * true  为延时任务，时间到了，就执行一次然后删除任务
     * false 为定时任务
     * @return
     */
    protected abstract boolean isDelay();

}
